#ifndef NETLIB_CURRENTTHREAD_H
#define NETLIB_CURRENTTHREAD_H

// 线程相关数据缓冲和处理

#include "Types.h"

namespace netlib
{
namespace CurrentThread
{

// __thread定义的变量为线程私有变量，其他的线程无法访问
// 定义一个该类型变量，所有的线程都会有一份，各自独立不共享
// __thread只能修饰POD类型，POD：与C兼容的数据类型，不能带有构造和虚函数

extern __thread int t_cachedTid;                // 线程全局标识tid缓存
extern __thread char t_tidString[32];           // tid的字符串形式缓存
extern __thread int t_tidStringLength;          // tid长度缓存
extern __thread const char* t_threadName;       // 线程名称缓存

void cacheTid();

inline int tid() // 获取线程的tid
{
    if (__builtin_expect(t_cachedTid == 0, 0)) // 判断是否已经缓存过，避免反复调用
        cacheTid();
    return t_cachedTid;
}

// 返回tid的字符串形式的缓存
inline const char* tidString() { return t_tidString; }

// 返回tid的字符串长度的缓存
inline int tidStringLength() { return t_tidStringLength; }

// 返回线程名称的缓存
inline const char* name() { return t_threadName; }

// 判断当前线程是否为主线程
bool isMainThread();

void sleepUsec(int64_t usec);

string stackTrace(bool demangle);


}  // namespace CurrentThread

}  // namespace netlib

#endif